//
// 栈
// Created by 麻再挺 on 2021/12/7.
//
#ifndef DATA_STRUCTURE_C_STACK_H
#define DATA_STRUCTURE_C_STACK_H
#include <stdio.h>
#include <stdlib.h>
#include "./../constant.h"

/**
 * 栈初始长度
 */
#define STACK_INIT_SIZE 10
/**
 * 存储空间分配增量
 */
#define STACK_INCREMENT 1

// 数据类型
typedef int SElemType;

// 栈
typedef struct StackNode {
    // 栈底元素
    SElemType *base;
    // 栈顶元素
    SElemType *top;
    // 当前可使用的最大容量
    int stack_size;
} Stack;

/**
 * 初始化栈
 */
Status Init_Stack(Stack *stack);

/**
 * 销毁栈
 * @param stack 栈
 * @return
 */
Status Destroy_Stack(Stack *stack);

/**
 * 清空栈
 * @param stack 栈
 * @return
 */
Status Clear_Stack(Stack *stack);

/**
 * 是否为空栈
 * @param stack 栈
 * @return
 */
Status Stack_Empty(Stack *stack);

/**
 * 栈长度
 * @param stack 栈
 * @return
 */
int Stack_Length(Stack *stack);

/**
 * 获取栈顶元素
 * @param stack 栈
 * @param elem 元素
 */
Status Stack_GetTop(Stack *stack, SElemType *elem);

/**
 * 入栈
 * @param stack 栈
 * @param elem 元素
 */
Status Stack_Push(Stack *stack, SElemType elem);

/**
 * 出栈
 * @param stack 栈
 * @param elem 元素
 */
Status Stack_Pop(Stack *stack, SElemType *elem);

/**
 * 打印栈数据
 * @param stack 栈
 */
void Stack_Print(Stack *stack);

#endif // DATA_STRUCTURE_C_STACK_H













